package com.example.data.mapper;

import com.example.data.vo.Triple;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 三元组专用Mapper：负责关联查询实体表和关系表，返回完整三元组
 */
@Mapper
public interface TripleMapper {

    /**
     * 查询所有有效三元组（is_valid=1）
     */
    List<Triple> selectAllValidTriples();

    /**
     * 按头实体ID查询三元组
     */
    List<Triple> selectTriplesByHeadEntityId(@Param("headEntityId") Long headEntityId);

    /**
     * 按关系类型查询三元组
     */
    List<Triple> selectTriplesByRelationType(@Param("relationType") String relationType);

    /**
     * 按尾实体ID查询三元组
     */
    List<Triple> selectTriplesByTailEntityId(@Param("tailEntityId") Long tailEntityId);

    /**
     * 按头实体ID和关系类型查询三元组
     */
    List<Triple> selectTriplesByHeadEntityIdAndRelationType(
            @Param("headEntityId") Long headEntityId,
            @Param("relationType") String relationType);

    /**
     * 按尾实体ID和关系类型查询三元组
     */
    List<Triple> selectTriplesByTailEntityIdAndRelationType(
            @Param("tailEntityId") Long tailEntityId,
            @Param("relationType") String relationType);

    /**
     * 统计有效三元组总数
     */
    Integer countValidTriples();
}
